/**
 * @file inpaintingengine.h
 * @brief 图像修复算法引擎头文件
 *
 * 定义图像修复算法的统一接口和实现类
 * 采用策略模式，支持多种修复算法
 */

#ifndef INPAINTINGENGINE_H
#define INPAINTINGENGINE_H

#include <QObject>              // Qt对象基类（支持信号槽）
#include <opencv2/opencv.hpp>   // OpenCV图像处理库

/**
 * @brief 图像修复算法引擎类
 *
 * 提供统一的图像修复接口，支持多种算法：
 * - FMM（快速行进法）：基于偏微分方程的修复
 * - Criminisi算法：基于样本的纹理合成修复
 * - 深度学习方法：基于神经网络的修复
 *
 * 设计特点：
 * - 采用策略模式，易于扩展新算法
 * - 支持进度通知和异步操作
 * - 统一的输入输出接口
 */
class InpaintingEngine : public QObject
{
    Q_OBJECT  // Qt宏，启用信号槽机制

public:
    explicit InpaintingEngine(QObject *parent = nullptr);

    // ==================== 算法类型枚举 ====================
    enum Algorithm {
        FMM,           // 快速行进法 - 已实现
        Criminisi,     // Criminisi算法 - 待实现
        DeepLearning   // 深度学习方法 - 待实现
    };

public slots:
    /**
     * @brief 执行图像修复的主接口
     * @param image 输入图像（RGB格式）
     * @param mask 修复蒙版（单通道，白色区域需要修复）
     * @param algorithm 选择的修复算法
     * @return 修复后的图像
     *
     * 根据算法类型调用具体的修复实现，并发射完成信号
     */
    cv::Mat inpaint(const cv::Mat &image, const cv::Mat &mask, Algorithm algorithm);

signals:
    /**
     * @brief 进度更新信号
     * @param percent 完成百分比（0-100）
     */
    void progressUpdated(int percent);

    /**
     * @brief 修复完成信号
     * @param result 修复结果图像
     */
    void finished(const cv::Mat &result);

private:
    // ==================== 具体算法实现 ====================
    cv::Mat runFMM(const cv::Mat &image, const cv::Mat &mask);          // FMM算法实现
    cv::Mat runCriminisi(const cv::Mat &image, const cv::Mat &mask);    // Criminisi算法实现（待完成）
    cv::Mat runDeepLearning(const cv::Mat &image, const cv::Mat &mask); // 深度学习算法实现（待完成）
};

#endif // INPAINTINGENGINE_H
